﻿#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

typedef int SLNDataType;

//single list
typedef struct SListnode
{
	int val;
	struct SListnode* next;
}SLNode;

//打印
void SLTPrint(SLNode* phead);

//尾插
void SLTPushBack(SLNode** pphead, SLNDataType x);

//头插
void SLTPushFront(SLNode** pphead, SLNDataType x);

//尾删
void SLTPopBack(SLNode** pphead);

//头删
void SLTPopFront(SLNode** pphead);


// 单链表查找
SLNode* SLTFind(SLNode* phead, SLNDataType x);


// 单链表在pos位置之后插入x
// 分析思考为什么不在pos位置之前插入？
void SLTInsertAfter(SLNode* pos, SLNDataType x);


// 单链表删除pos位置之后的值
// 分析思考为什么不删除pos位置？
void SLTEraseAfter(SLNode* pos);

// 在pos的前面插入
SLNode* SLTInsert(SLNode** pphead, SLNode* pos, SLNDataType x);
// 删除pos位置
void SLTErase(SLNode** pphead, SLNode* pos);

//销毁链表
void SLTDestroy(SLNode** pphead);